package 栈和队列;

import java.util.Queue;
import java.util.Stack;


//void push(int x) 将元素 x 推到队列的末尾
//int pop() 从队列的开头移除并返回元素
//int peek() 返回队列开头的元素
//boolean empty() 如果队列为空，返回 true ；否则，返回 false
public class MyQueue {
    //用栈实现队列，通过两个栈即可，一个栈负责进，一个负责出
    Stack<Integer> stackIn; //进队列
    Stack<Integer> stackOut;//出队列

    public MyQueue() {
        stackIn = new Stack<>();
        stackOut = new Stack<>();
    }

    public void push(int x) {
        stackIn.push(x);
    }

    public int pop() {
        dumpstackIn();
        return stackOut.pop();
    }

    public int peek() {
        dumpstackIn();
        return stackOut.peek();
    }

    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }

    // 如果stackOut为空，那么将stackIn中的元素全部放到stackOut中
    private void dumpstackIn(){
        //这里要纠正一下，只是行为上没有区别，但是 isEmpty() 直接使用 elementCount 进行比较，而 empty() 会去调用 size() 获取 elementCount 的值，然后再进行比较，实际执行中 isEmpty() 会比 empty() 少一次方法调用，所以建议使用 isEmpty() 方法。
        if(!stackOut.empty())   return;
        while (!stackIn.isEmpty()){
            stackOut.push(stackIn.pop());
        }
    }
}
